home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
magazine
/
msysjour
/
vol04
/
01b
/
macsl
/
mpmfig5.txt
< prev
next >
Wrap
Text File
|
1988-10-27
|
4KB
|
150 lines
MRESULT EXPENTRY MpmFnwpScrollBar( hwnd, msg, mp1, mp2 )
HWND hwnd;
USHORT msg;
MPARAM mp1;
MPARAM mp2;
{
USHORT id;
ControlHandle hctl, hctl1;
Rect rect;
Rect* prect;
SHORT sPart;
POINTL ptl;
SHORT cmd;
Handle hcdef;
LONG lPoint;
Point point;
static BOOL fTrackThumb = FALSE;
static SHORT sInitValue;
if( ! MpmValidateWindow(hwnd) )
return FALSE;
id = MYWNDOF(hwnd).id;
hctl = MYWNDOF(hwnd).hctl;
switch( msg )
{
/* Return the current position */
case SBM_QUERYPOS:
return MRFROMSHORT( fTrackThumb ? sInitValue
: (**hctl).contrlValue );
/* Return the scroll bar range */
case SBM_QUERYRANGE:
return MRFROM2SHORT( (**hctl).contrlMin, (**hctl).contrlMax );
/* Set the scroll bar position and range */
case SBM_SETSCROLLBAR:
(**hctl).contrlMin = SHORT1FROMMP(mp2);
(**hctl).contrlMax = SHORT2FROMMP(mp2);
/* fall through */
/* Set the scroll bar position only */
case SBM_SETPOS:
if( MYWNDOF(hwnd).flStyle & WS_VISIBLE )
SetCtlValue( hctl, SHORT1FROMMP(mp1) );
else
(**hctl).contrlValue = SHORT1FROMMP(mp1);
fTrackThumb = FALSE;
return MRFROMSHORT(1);
/* Handle mouse button down: call TrackControl to track it */
case WM_BUTTON1DOWN:
ptl.x = SHORT1FROMMP(mp1);
ptl.y = SHORT2FROMMP(mp1);
MpmMapMacOfPtl( hwnd, &point, &ptl );
sPart = FindControl( point, PWINOFHWND(hwnd), &hctl1 );
ASSERT( sPart && hctl1 == hctl,
"MpmFnwpScrollBar: FindControl failed" );
_hwndTrack = hwnd;
if( sPart == inThumb )
{
fTrackThumb = TRUE;
sInitValue = (**hctl).contrlValue;
if( TrackControl( hctl, point, NULL ) )
MpmTrackScrollBarNotify( SB_SLIDERPOSITION );
fTrackThumb = FALSE;
}
else
{
TrackControl( hctl, point, (ProcPtr)MpmTrackScrollBar );
MpmTrackScrollBarNotify( SB_ENDSCROLL );
}
return 0L;
/* Handle scroll bar creation: call NewControl to create it */
case WM_CREATE:
rect.left = rect.top = 0;
if( MYWNDOF(hwnd).flStyle & SBS_VERT )
rect.right = _alSysVal[SV_CXVSCROLL], rect.bottom = 100;
else
rect.bottom = _alSysVal[SV_CYHSCROLL], rect.right = 100;
hctl = NewControl( PWINOFHWND(hwnd), &rect, _szNull,
MYWNDOF(hwnd).flStyle & WS_VISIBLE,
0, 0, 1, scrollBarProc, (long)hwnd );
if( ! hctl )
return MRFROMSHORT(1);
MYWNDOF(hwnd).hctl = hctl;
return 0L;
/* Destroy scroll bar */
case WM_DESTROY:
MYWNDOF(hwnd).hctl = NULL;
DisposeControl( hctl );
return 0L;
/* Handle window movement: use MoveControl to move the bar */
case WM_MOVE:
MpmQueryMacRect( hwnd, &rect );
if( MYWNDOF(hwnd).flStyle & WS_VISIBLE )
MoveControl( hctl, rect.left, rect.top );
else
{
prect = &(**hctl).contrlRect;
prect->right += rect.left - prect->left;
prect->left = rect.left;
prect->bottom += rect.top - prect->top;
prect->top = rect.top;
}
return 0L;
/* Show or hide the scroll bar */
case WM_SHOW:
if( mp1 )
ShowControl( hctl );
else
HideControl( hctl );
return 0L;
/* Handle window resizing: use SizeControl to resize it */
case WM_SIZE:
if( SHORT1FROMMP(mp2) && SHORT2FROMMP(mp2) )
{
if( MYWNDOF(hwnd).flStyle & WS_VISIBLE )
SizeControl( hctl,
SHORT1FROMMP(mp2),
SHORT2FROMMP(mp2) );
else
{
prect = &(**hctl).contrlRect;
prect->right = prect->left + SHORT1FROMMP(mp2);
prect->bottom = prect->top + SHORT2FROMMP(mp2);
}
}
return 0L;
}
return WinDefWindowProc( hwnd, msg, mp1, mp2 );
}